<?php
namespace Admin\Model;

use \Think\Model;

class GoodscategoryModel extends Model
{
	protected $_validate=array(
        array('name','require','分类名不能为空'),
        //新增或修改时判断name格式
		);

	protected $_auto=array(
        array('ppath','getPath',1,'callback'),
		);

	//获取路径的方法
	protected function getPath()
	{
		//获取父类ppath和id
		$list=$this->field('id,ppath')->find(I('pid'));
		if($list){
			return $list['ppath'].$list['id'].',';
		} else {
			return "0,";
		}
	}

	/**
     * 获取 二维数组
     * @param  int    $id   分类id
     * @param  bool   $field 查询字段
     * @return arrsy         分类二维数组   
	*/
	public function getAdminCate($id=0,$field=true)
	{
		//获取所有商品分类信息
		$list=$this->field($field)->select();
		//处理分类信息
		$list=$this->getHtmlCate($list,'——',$id,0);

		return $list;
	}

	/**
     * 获取分类树,指定分类则返回指定分类及其子分类,不指定则返回所有的分类数
     * @param int $id 分类ID
     * @param bool $field 查询字段
     * @return array     分类树
	*/
	public function getHomeCate($id=0,$field=true)
	{
		//获取所有分类信息
		$list=$this->field($field)->select();
		//处理分类信息
		$list=$this->getTreeCate($list,$id,'child');

		if (is_numeric($id) && $id > 0) {
			$arr=$this->field($field)->find($id);
			$arr['child']=$list;
			return $arr;
		}
		return $list;
	}

	/**
     * [unlimitCate 得到经过排序的分类二维数组,用于后台分级显示]  
     * @param [type]  $cate  [结果集] 
     * @param string  $html  [分隔符] 
     * @param int     $pid   [pid] 
     * @param int     $level [级别]   
     * @return [type]        [二维数组] 
	*/
	private function getHtmlCate($cate,$html="——",$pid=0,$level=0)
	{
		$arr=array();
		foreach($cate as $v){
			if ($v['pid'] == $pid) {
				$v['html'] = str_repeat($html,$level);
				$v['level']=$level;
				$arr[]=$v;
				$arr=array_merge($arr,$this->getHtmlCate($cate,$html,$v['id'],$level+1));
			}
		}
		return $arr;
	}

	/**
     * [menu 处理返回多维分类数组,用于前台导航显示]
     * @param [type] $cate [结果集] 
     * @param [type] $pid  [当前分类的id] 
     * @param [type] $name [子类的索引名]
     * @return [type]      [description]
	*/
	private function getTreeCate($cate,$pid=0,$name="child")
	{
		$arr=array();
		foreach($cate as $v){
			if($v['pid']==$pid){
				$v[$name]=$this->getTreeCate($cate,$v['id']);
				$arr[]=$v;
			}
		}
		return $arr;
	}
}